package pro.cherish.knowledgeumldesignpattern.designPattern.com.cherish.decorator;
//装饰器，如果A类型有三个子类型，那根据排列组合会有C32中组合方式，即3中，而如果类型多了，则会造成类型扩展
//简单通过继承不够灵活，而使用装饰器则是需要3个子类装饰器即可，使用装饰的思想添加特性
//典型的io流操作与servlet API中对request与response 都有装饰模式，以及struct2 request 和response session 对象处理都是有装饰模式
//缺点：产生很多小对象、不熟易出错，调试排查麻烦

//桥接是n个变化维度，既有部分不稳定
//而装饰是增加新功能
public class client {
    public static void main(String [] args){
        Car car = new Car();
        car.move();
        System.out.println("-----增加新的功能飞行");
        FlyCar flyCar = new FlyCar(car);
        flyCar.move();

        System.out.println("-----增加新的功能水上游");
        WaterCar waterCar = new WaterCar(car);
        waterCar.move();


        System.out.println("-----flycar增加新的功能水上游");
        WaterCar newCar = new WaterCar(flyCar);
        newCar.move();
    }
}
